import { Component, OnInit } from '@angular/core';
import { ConfigService, Config, WebAuthorizeResult, Result } from 'src/app/service/config.service';
import {ActivatedRoute  } from '@angular/router';
import { User, UserService } from 'src/app/service/user.service';

@Component({
  selector: 'app-devtools',
  templateUrl: './devtools.component.html',
  styleUrls: ['./devtools.component.css']
})
export class DevtoolsComponent implements OnInit {

  switcherPushProcess:Boolean = false;
  isDev:Boolean = false;
  openid:String = '';
  oauthCode:string = '';

  constructor(
    private service:ConfigService,
    private userService:UserService,
    private route:ActivatedRoute
  ) { 
    // 初始化组件
    this.initComponent();

    // 2019年10月14日17:27:44 之后要弃用
    this.initSwitcherPushprocess();
  }

  ngOnInit() {
  }

  /**
   * 初始化组件
   */
  initComponent(){
    // 从路由中获取参数
    this.openid = this.route.snapshot.queryParams["openid"];
    this.oauthCode = this.route.snapshot.queryParams["code"];

    /**
     * 1. 使用 oauth 传递来的 code 向微信服务器请求当前微信用户的 openid
     * 2. 使用 openid 到后台数据库中查询是否开发人员
     */
    this.initDev();
  }

  /**
   * 从后端DB中获取推送刷卡的开关的状态，将状态应用到UI的开关控件中
   */
  initSwitcherPushprocess(){
    const switcher = this.service.switchers.PUSH_PROCESS;
    this.service.selectBySwitcherName(switcher).subscribe(
      (res:Config) =>{
        this.switcherPushProcess = res.value ===1?true:false;
      },error => console.log('获取指定开关时出错！')
    )
  }


  /**
   * 拨动推送刷卡的开关
   */
  switchPushProcess(){
    if(this.switcherPushProcess) {
      this.service.openPushProcess().subscribe(
        res => console.log('打开了刷卡推送功能！'),
        error => console.log('打开刷卡推送功能时出错！')
      )
    }else{
      this.service.closePushProcess().subscribe(
        res => console.log('关闭了刷卡推送功能！'),
        error => console.log('关闭刷卡推送功能时出错！')
      )
    }
  }



  // 前端使用参数 code 直接发送请求获取 ACCESS_TOKEN 和 openid 会产生跨域的问题
  // 应该是在后端发送请求获取
  getOpenidByOAuth(){
    // alert('进入获取 ACCESS_TOKEN 的请求中');
    if(!this.oauthCode) return;
    if(this.oauthCode.length<=0) return;
    // alert('oauthCode = ' + this.oauthCode);

    this.service.getAccessToken(this.oauthCode).subscribe(
      ( res:WebAuthorizeResult ) =>{
        console.log(res);
        // alert('请求返回的ACCESS_TOKEN是：' + res.toString());
        this.openid = res.openid;

        // 判断是否是开发人员
        if( this.openid.length>0 ){
          // alert('openid:' + this.openid + '，即将发送请求验证是否开发人员！');
          this.userService.isDev(this.openid).subscribe(
            ( res:boolean ) =>{
              this.isDev = res;
            },error =>{
              console.log('验证是否开发人员时出错！');
            }
          )
        }
      },error => {
        console.log('使用Author Code 获取 ACCESS_TOKEN 时候出错！');
      }
    )
  }


  /**
   * 1. 使用 oauth 传递来的 code 向微信服务器请求当前微信用户的 openid
   * 2. 使用 openid 到后台数据库中查询是否开发人员
   */
  initDev(){
    this.service.getOpenidByOAuth(this.oauthCode).subscribe(
      (res:Result) =>{
        this.openid = res.data.toString();

        this.userService.isDev(this.openid).subscribe(
          res => {
            this.isDev = res;
          },error => console.log('获取是否开发者时出错！')
        )
      },error => {
        console.log('initDev 通过后端发送请求获取 openid 失败！');        
        console.log(error);
      }
    )

  }


}
